package com.example.core

import android.app.Application
import android.content.Context

/**
 * 为什么去除了Static，因为用static修饰以后，就不属于任何对象了
 * 显然，这不符合万物皆对象的概念
 */
class BaseApplication : Application() {
    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        currentApplication = this
    }

/*    *//**
     * 定义静态函数的方式3
     * 伴生对象 通过BaseApplication.currentApplication()方式调用
     *//*
    companion object {
        private lateinit var currentApplication: Context

        @JvmStatic
        fun currentApplication(): Context {
            return currentApplication
        }
    }*/
    /**
     * 定义静态函数的方式3
     * 伴生对象
     * kotlin的var会帮我们自动生成get set
     */
    companion  object {
        //如果不添加注解@JvmStatic，Kotlin中可以BaseApplication.currentApplication这样调用，但是Java中只能通过伴生对象调用BaseApplication.Companion.getCurrentApplication();
        //加了注解@JvmStatic后，Java中可以这样调用 BaseApplication.getCurrentApplication()
         @JvmStatic
         //那如果我们想在Java中，通过BaseApplication.currentApplication()这样调用。我们还可以修改get方法的名称
        @get:JvmName("currentApplication")
        lateinit var currentApplication: Context
            private set//不想让外部替换值，将set设置为私有的
    }
}